/**
 * 
 */
package com.mbengue.corp.apr.ra.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.mbengue.corp.apr.ra.core.Adresse;
import com.mbengue.corp.apr.ra.dao.AdresseDao;
import com.mbengue.corp.apr.ra.util.HibernateUtil;

/**
 * @author MMB11447
 *
 */
public class AdresseDaoImpl implements AdresseDao {
  private static final long serialVersionUID = 1L;
  private Session session;

  public AdresseDaoImpl() {
    session = HibernateUtil.getSessionFactory();
  }

  /* (non-Javadoc)
   * @see com.mbengue.corp.apr.ra.dao.AdresseDao#ajouterAdresse(com.mbengue.corp.apr.ra.core.Adresse)
   */
  /*public void ajouterAdresse(Adresse adresse) throws HibernateException {
  	Transaction transaction = session.beginTransaction();
  	try {
  		session.save(adresse);
  		transaction.commit();
  	} catch (Exception e) {
  		transaction.rollback();
  		throw new HibernateException(e);
  	} finally {
  		session.flush();
  		session.close();
  	}
  }*/
  /* (non-Javadoc)
   * @see com.mbengue.corp.apr.ra.dao.AdresseDao#trouverAdresse(long)
   */
  @Override
  public Adresse trouverAdresse(long idAdresse) {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see com.mbengue.corp.apr.ra.dao.AdresseDao#trouverAdresseParCP(java.lang.String)
   */
  @Override
  public List<Adresse> trouverAdresseParCP(String codePostal) {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void ajouter(Adresse objet) throws HibernateException {
    Transaction transaction = session.beginTransaction();
    try {
      session.save(objet);
      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      throw new HibernateException(e);
    } finally {
      session.flush();
      //session.close();
    }
  }

  @Override
  public Adresse modifier(Adresse objet) throws HibernateException {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void supprimer(Adresse objet) throws HibernateException {
    Transaction tra = session.beginTransaction();
    //Adresse tmp = (Adresse) session.merge(objet);
    session.delete(objet);
    tra.commit();
  }

  @Override
  public Adresse trouver(Long key) throws HibernateException {
    Criteria criteria = session.createCriteria(Adresse.class);
    criteria.add(Restrictions.eq("id", key));
    return (Adresse) criteria.uniqueResult();
  }

  @Override
  public void update(Adresse aAdresse) {
    Transaction tra = session.beginTransaction();
    session.merge(aAdresse);
    tra.commit();
  }
}
